package red.social;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

public class ListaAmigos extends Activity implements OnClickListener,OnItemClickListener {
	private ListView lView;
	private StringBuilder sbOpcionesSeleccionadas;
	private List<String> listaMostrarNombre;
	private List<InfoAmigos> listaAmigosRecuperadosBD;
	private String SERVLET_URL;
	private String ip;
	private String datos, sitio;
	private int idUsuario;
	private Bundle parametros;
	
	/*
	 * (non-Javadoc)
	 * 
	 * @see android.app.Activity#onCreate(android.os.Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.addamigos);

		ip = getResources().getString(R.string.ip);
		SERVLET_URL = "http://"+ip+":8080/Modulo10-war/GruposServlet";
		
		Button addAmigosAGrupo = (Button) this.findViewById(R.id.buttonAddAmigosAGrupos);

		// asignamos el listeners
		addAmigosAGrupo.setOnClickListener(this);

		parametros = getIntent().getExtras();

		if (parametros.isEmpty()) {
			Toast.makeText(this, "No se han recuperado par�metros",
					Toast.LENGTH_LONG).show();
		} else {
			idUsuario = parametros.getInt("idUsuario");

			datos = "?peticion=RECUPERARAMIGOS&usuario=" + idUsuario;

			sitio = SERVLET_URL + datos;

			try {
				URL ob = new URL(sitio);
				URLConnection conn = ob.openConnection();
				conn.setDoInput(true);
				conn.setDoOutput(true);
				InputStream in = conn.getInputStream();
				DataInputStream dos = new DataInputStream(in);

				int recuperamosAmigos = dos.readInt();

				if (recuperamosAmigos == 1) {
					Toast.makeText(this, "No tienes amigos", Toast.LENGTH_LONG)
							.show();
				} else if (recuperamosAmigos == 2) {
					int numAmigos = dos.readInt();

					int idAmigo;
					String nombreApellidosAmigo;
					this.listaAmigosRecuperadosBD = new ArrayList<InfoAmigos>();
					this.listaMostrarNombre = new ArrayList<String>();

					for (int i = 0; i < numAmigos; i++) {
						idAmigo = dos.readInt();
						nombreApellidosAmigo = dos.readUTF();

						InfoAmigos amigo = new InfoAmigos(
								Integer.valueOf(idAmigo), nombreApellidosAmigo);
						this.listaAmigosRecuperadosBD.add(amigo);
						this.listaMostrarNombre.add(nombreApellidosAmigo);
					}

					// rellenamos el listView
					lView = (ListView) findViewById(R.id.listViewAmigos);
					// Set option as Multiple Choice. So that user can able to
					// select more the one option from list
					lView.setAdapter(new ArrayAdapter<String>(this,
							android.R.layout.simple_list_item_multiple_choice,
							listaMostrarNombre));
					lView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
					lView.setOnItemClickListener(this);
				}

				// cerramos el flujo
				dos.close();

			} catch (IOException e) {
				Toast.makeText(this, "IOEx: " + e.getMessage(),
						Toast.LENGTH_LONG).show();
			}
		}

		// inicializamos el StringBuilder que va a contener los codigos de los
		// amigos seleccionados de la listView
		this.sbOpcionesSeleccionadas = new StringBuilder();
	}

	@Override
	public void onClick(View v) {
		if (v.equals(this.findViewById(R.id.buttonAddAmigosAGrupos))) {
			if (sbOpcionesSeleccionadas.length() != 0) { // si hemos seleccionado alg�n amigo
				StringTokenizer st = new StringTokenizer(
						this.sbOpcionesSeleccionadas.toString(), "X");
				List<String> amigosSeleccionados = new ArrayList<String>();
				List<Integer> codigosAmigosGrupo = new ArrayList<Integer>();

				while (st.hasMoreTokens()) {
					String token = st.nextToken();
					amigosSeleccionados.add(this.listaMostrarNombre.get(Integer
							.parseInt(token)));
					codigosAmigosGrupo.add((this.listaAmigosRecuperadosBD
							.get(Integer.parseInt(token))).getIdAmigo());
				}

				// enviamos informaci�n a la actividad de creaci�n del grupo
				Intent irACrearGrupo = new Intent();
				irACrearGrupo.putIntegerArrayListExtra("amigosSeleccionadosGrupo",(ArrayList<Integer>) codigosAmigosGrupo);
				irACrearGrupo.putStringArrayListExtra("nombreAmigosSeleccionados", (ArrayList<String>) amigosSeleccionados);
				irACrearGrupo.putExtra("idUsuario", idUsuario);
				irACrearGrupo.setClass(this, CrearGrupo.class);
				this.startActivity(irACrearGrupo);
			}else{
				// enviamos informaci�n a la actividad de creaci�n del grupo
				Intent irACrearGrupo = new Intent();
				irACrearGrupo.putIntegerArrayListExtra("amigosSeleccionadosGrupo",null);
				irACrearGrupo.putStringArrayListExtra("nombreAmigosSeleccionados",null);
				irACrearGrupo.putExtra("idUsuario", idUsuario);
				irACrearGrupo.setClass(this, CrearGrupo.class);
				this.startActivity(irACrearGrupo);
			}
		}
	}

	@Override
	public void onItemClick(AdapterView<?> arg0, View arg1,
			int posicionSeleccionada, long arg3) {
		this.sbOpcionesSeleccionadas.append(posicionSeleccionada).append("X");
	}
}